/***********************************************************************************
 * 文件名： mcu_wdt.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		看门狗驱动。
 * 修改记录：
 * 	2021/7/30: 初版。 刘言。
***********************************************************************************/
#ifndef _MCU_WDT_H_
#define _MCU_WDT_H_

#include "mcu.h"

// 按照配置文件对WDT进行初始化，会启动WDT且不可以再关闭
// 注意，即便是复位，WDT也不可以被关闭或修改寄存器，必须彻底断电一段时间。
// 意味着不断电，直接修改代码配置，即便重新烧录，新的配置也不会生效，需要先断电清除之前的配置。
STATIC_FORCE_IN_LINE void Wdt_Init()
{
    M0P_WDT->CON = (_WDT_MODE << 5) | (_WDT_TIME_SEL << 0);
#if (_WDT_MODE == 1)
    NVIC_ClearPendingIRQ(WDT_IRQn);        // 清除NVIC中断标志位
    NVIC_SetPriority(WDT_IRQn, 3);         // 优先级 3 （0~3）
    NVIC_EnableIRQ(WDT_IRQn);              // NVIC允许中断
#endif
    // 启动WDT
    M0P_WDT->RST = 0X1E;
    M0P_WDT->RST = 0XE1;
}

// 清零WDT计数器（同时会清除掉中断标志）
STATIC_FORCE_IN_LINE void Wdt_Clear()
{
    M0P_WDT->RST = 0X1E;
    M0P_WDT->RST = 0XE1;
}

// 获取WDT中断标志位
#define Wdt_GetIntFlag()        M0P_WDT->CON_f.INT

// 清除WDT中断标志位，同时会清零WDT计数器
#define Wdt_ClearIntFlag()      Wdt_Clear()

#endif
